// 离散化模板一: 排序 + 去重 + 二分查找
// #include <iostream>
// #include <algorithm>

// using namespace std;

// const int N = 1e5 + 10;

// int n;
// int a[N];

// int pos; // 去重后的个数
// int disc[N]; // 帮助离散化

// int find(int x)
// {
// 	int l = 1, r = pos;
// 	while (l < r)
// 	{
// 		int mid = (l + r) / 2;
// 		if (disc[mid] >= x)	r = mid;
// 		else	l = mid + 1;
// 	}
// 	return l;
// }

// int main()
// {
// 	cin >> n;
// 	for (int i = 1; i <= n; i++)
// 	{
// 		cin >> a[i];
// 		disc[++pos] = a[i];
// 	}

// 	// 离散化
// 	sort(disc + 1, disc + 1 + pos);	// 排序
// 	pos = unique(disc + 1, disc + 1 + pos) - (disc + 1);	// 去重

// 	for (int i = 1; i <= n; i++)
// 	{
// 		cout << a[i] << ":" << find(a[i]) << endl;
// 	}

// 	return 0;
// }


#include <iostream>
#include <algorithm>
#include <unordered_map>

using namespace std;

const int N = 1e5 + 10;

int n;
int a[N];

int pos; // 去重后的个数
int disc[N]; // 帮助离散化

unordered_map<int, int> id; // <原始值, 离散化后的值>

int main()
{
	cin >> n;
	for (int i = 1; i <= n; i++)
	{
		cin >> a[i];
		disc[++pos] = a[i];
	}

	// 离散化
	sort(disc + 1, disc + 1 + pos);	// 排序

	int cnt = 0; // 当前值是第几号元素
	for (int i = 1; i <= pos; i++)
	{
		int x = disc[i];
		if (id.count(x))	continue;
		cnt++;
		id[x] = cnt;
	}

	for (int i = 1; i <= n; i++)
	{
		cout << a[i] << ":" << id[a[i]] << endl;
	}

	return 0;
}